﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;


namespace CapaPresentacion.Vistas
{
    class VentanaBusquedaEvaluacionViewModel
    {

         private RelayCommand buscarEvaluacionCommand;
        private RelayCommand editarEvaluacionCommand;
        private RelayCommand eliminarEvaluacionCommand;

        public event EditarEntidad EditarEntidad;
        private string año;
        private Guid idSeleccionado;

        public string Año
        {
            get { return año; }
            set { año = value; }

        }

        public ICommand BuscarEvaluacionCommand
        {
            get
            {
                return buscarEvaluacionCommand;
            }
        }

        public ICommand EditarEvaluacionCommand
        {
            get
            {
                return editarEvaluacionCommand;
            }
        }

        public ICommand EliminarEvaluacionCommand
        {
            get
            {
                return eliminarEvaluacionCommand;
            }
        }


        public List<ViewEntity> ListaEvaluaciones { get; set; }

        public Guid IdSeleccionado
        {
            get { return idSeleccionado; }
            set { idSeleccionado = value; }

        }

        private VentanaBusquedaEvaluacion view;

        public VentanaBusquedaEvaluacionViewModel() { }

        public VentanaBusquedaEvaluacionViewModel(VentanaBusquedaEvaluacion vista)
        {
            this.view = vista;
            this.buscarEvaluacionCommand = new RelayCommand(BuscarEvaluacion);
            this.editarEvaluacionCommand = new RelayCommand(EditarEvaluacion);

            this.año = DateTime.Now.Year.ToString(); 

        }

        public VentanaBusquedaEvaluacionViewModel(VentanaBusquedaEvaluacion vista, string eliminar)
        {
            this.view = vista;
            this.buscarEvaluacionCommand = new RelayCommand(BuscarEvaluacion);
            this.eliminarEvaluacionCommand = new RelayCommand(EliminarEvaluacion);
            this.view.btnEditar.Visibility = Visibility.Collapsed;
            this.view.btnEliminar.Visibility = Visibility.Visible;
            this.view.titulo.Content = "Eliminar Evaluación";

            this.año = DateTime.Now.Year.ToString(); 
        }

        public void BuscarEvaluacion(object parameter)
        {
            if (Validaciones())
            {
                ListaEvaluaciones = new EvaluarAlumnoLogica().ObtenerEvaluacionesAEditarPorAño(Convert.ToInt32(this.año));

                if (ListaEvaluaciones != null && ListaEvaluaciones.Count > 0)
                {
                    this.view.listaDatos.ItemsSource = ListaEvaluaciones;
                    this.view.panelResultados.Visibility = Visibility.Visible;
                    this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                    this.view.lblNoSelected.Visibility = Visibility.Collapsed;
                }
                else
                {
                    this.view.panelResultados.Visibility = Visibility.Collapsed;                   
                    this.view.lblNoRecords.Visibility = Visibility.Visible;
                    
                }
            }         


        }


        public void EditarEvaluacion(object Parameter)
        {

            if (this.año.Length == 4)
            {
                if (this.idSeleccionado != Guid.Empty)
                {
                    this.view.lblNoSelected.Visibility = Visibility.Collapsed;

                    EvaluacionAlumno entidad = new EvaluarAlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado, Convert.ToInt32(año));


                    if (entidad.Evaluacion.TipoEvaluacion == "1, 2 Años")
                        this.EditarEntidad(CasosDeUso.EvaluarAlumno1año, entidad);
                    else
                        this.EditarEntidad(CasosDeUso.EvaluarAlumno3años, entidad);

                    this.view.Close();

                }
                else
                {
                    this.view.lblNoSelected.Visibility = Visibility.Visible;
                }
            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El campo 'Año' ha sido ingresado de forma incorrecta");
                this.view.panelResultados.Visibility = Visibility.Collapsed;
                this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                nueva.ShowDialog();

            }


        }

        public void EliminarEvaluacion(object Parameter)
        {

            if (this.año.Length == 4)
            {

                if (this.idSeleccionado != Guid.Empty)
                {
                    if (MessageBox.Show("¿Está seguro que desea eliminar la Evaluacion seleccionada?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                    {

                        try
                        {
                            this.view.lblNoSelected.Visibility = Visibility.Collapsed;

                            EvaluacionAlumno entidad = new EvaluarAlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado, Convert.ToInt32(año));

                            entidad.Eliminada = true;
                            new EvaluarAlumnoLogica().Modificar(entidad);

                            VentanaAviso nueva = new VentanaAviso(false, "Finalización exitosa", "La Evaluacion seleccionada ha sido eliminada");
                            nueva.ShowDialog();
                            this.view.Close();
                        }

                        catch (Exception)
                        {

                            VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "  Ha ocurrido un error y la evaluación no ha podido ser eliminada");
                            nueva.ShowDialog();

                        }


                    }

                }
                else
                {
                    this.view.lblNoSelected.Visibility = Visibility.Visible;
                }
            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El campo 'Año' ha sido ingresado de forma incorrecta");
                this.view.panelResultados.Visibility = Visibility.Collapsed;
                this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                nueva.ShowDialog();

            }
        }

        

        internal bool Validaciones()
        {

            if (this.año.Length != 4)
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El campo 'Año' ha sido ingresado de forma incorrecta");
                this.view.panelResultados.Visibility = Visibility.Collapsed;
                this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                nueva.ShowDialog();
                return false;

            }

           
            return true;
        }






    }
}
